package com.lvandroid.play.util;

import android.text.TextUtils;
import android.util.Log;

import com.lvandroid.play.player.VideoPlayer;
import com.lvandroid.player.BuildConfig;

/**
 * LOG打印工具，根据gradle中配置日志输出级别，控制日志打印
 */
public class LogUtil {

    /** 定义的日志级别 ---start**/
    private static final int LOG_LEVEL_VERBOSE = 1;
    private static final int LOG_LEVEL_DEBUG = 2;
    private static final int LOG_LEVEL_INFO = 3;
    private static final int LOG_LEVEL_WARNING = 4;
    private static final int LOG_LEVEL_ERROR = 5;
    /** 定义的日志级别 ---end**/

    private static final String EXCEPTION_HEADER = "exception occurs : ";

    /**
     * 打印v级别的log
     * @param tag 日志tag。
     * @param msg 日志message
     */
    public static void v(String tag, String msg) {
        if(BuildConfig.LOG_LEVEL > LOG_LEVEL_VERBOSE) {
            return;
        }

        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(msg)) {
            return;
        }

        Log.v(tag, msg);
    }

    /**
     * 打印v级别的log，附带输出当前调用栈
     * @param tag 日志tag。
     * @param msg 日志message
     */
    public static void v_withTrace(String tag, String msg) {
        if(BuildConfig.LOG_LEVEL > LOG_LEVEL_VERBOSE) {
            return;
        }

        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(msg)) {
            return;
        }

        Log.v(tag, msg + "----> start trace : " + Log.getStackTraceString(new Throwable()));
    }

    /**
     * 打印d级别的log
     * @param tag 日志tag。
     * @param msg 日志message
     */
    public static void d(String tag, String msg) {
        if(BuildConfig.LOG_LEVEL > LOG_LEVEL_DEBUG) {
            return;
        }

        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(msg)) {
            return;
        }

        Log.d(tag, msg);
    }

    /**
     * 打印d级别的log，附带输出当前调用栈
     * @param tag 日志tag。
     * @param msg 日志message
     */
    public static void d_withTrace(String tag, String msg) {
        if(BuildConfig.LOG_LEVEL > LOG_LEVEL_DEBUG) {
            return;
        }

        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(msg)) {
            return;
        }

        Log.d(tag, msg + "----> start trace : " + Log.getStackTraceString(new Throwable()));
    }

    /**
     * 打印i级别的log
     * @param tag 日志tag。
     * @param msg 日志message
     */
    public static void i(String tag, String msg) {
        if(BuildConfig.LOG_LEVEL > LOG_LEVEL_INFO) {
            return;
        }

        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(msg)) {
            return;
        }

        Log.i(tag, msg);
    }

    /**
     * 打印i级别的log，附带输出当前调用栈
     * @param tag 日志tag。
     * @param msg 日志message
     */
    public static void i_withTrace(String tag, String msg) {
        if(BuildConfig.LOG_LEVEL > LOG_LEVEL_INFO) {
            return;
        }

        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(msg)) {
            return;
        }

        Log.i(tag, msg + "----> start trace : " + Log.getStackTraceString(new Throwable()));
    }

    /**
     * 打印w级别的log
     * @param tag 日志tag。
     * @param msg 日志message
     */
    public static void w(String tag, String msg) {
        if(BuildConfig.LOG_LEVEL > LOG_LEVEL_WARNING) {
            return;
        }

        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(msg)) {
            return;
        }

        Log.w(tag, msg);
    }

    /**
     * 打印w级别的log，附带输出当前调用栈
     * @param tag 日志tag。
     * @param msg 日志message
     */
    public static void w_withTrace(String tag, String msg) {
        if(BuildConfig.LOG_LEVEL > LOG_LEVEL_WARNING) {
            return;
        }

        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(msg)) {
            return;
        }

        Log.w(tag, msg + "----> start trace : " + Log.getStackTraceString(new Throwable()));
    }

    /**
     * 打印e级别的log
     * @param tag 日志tag
     * @param msg 日志message
     */
    public static void e(String tag, String msg) {
        if(BuildConfig.LOG_LEVEL > LOG_LEVEL_ERROR) {
            return;
        }

        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(msg)) {
            return;
        }

        Log.e(tag, msg);
    }

    /**
     * 打印e级别的log，附带输出当前调用栈
     * @param tag 日志tag。
     * @param msg 日志message
     */
    public static void e_withTrace(String tag, String msg) {
        if(BuildConfig.LOG_LEVEL > LOG_LEVEL_ERROR) {
            return;
        }

        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(msg)) {
            return;
        }

        Log.e(tag, msg + "----> start trace : " + Log.getStackTraceString(new Throwable()));
    }

    public static void throwException(String tag, String exceptionMsg) {
        if(TextUtils.isEmpty(tag) || TextUtils.isEmpty(exceptionMsg)) {
            return;
        }

        Log.e(tag, EXCEPTION_HEADER + " : " + exceptionMsg);
    }

}
